package compilador.ts;

import java.util.ArrayList;

import compilador.Token;
/**
 * 
 * @author Juan Luis Martinez
 *
 */
public class TablaSimbolos {

	ArrayList<EntradaTS> ts;

	public static final int NOESTA = -1;

	/**
	 * Constructor
	 */
	public TablaSimbolos(){
		ts = new ArrayList<EntradaTS>();
		insertarPalabrasReservadas();
	}


	/**
	 * Introduce las palabras reservadas en la tabla de simbolos
	 * al crear la tabla
	 */
	public void insertarPalabrasReservadas(){

		//TODO meter todas las entradas, y revisar que poner en el tipo
		ts.add(new EntradaTS( Token.AND, "and", -1, -1));
		ts.add(new EntradaTS( Token.RES_BOOLEANO, "booleano", -1, -1));
	}

	/**
	 * Devuelve el lexema de una posicion concreta de la tabla de simbolos
	 * 
	 * @param index indice de la tabla de simbolos
	 * @return String - null si no existe esa posicion en la tabla
	 *                - el lexema en caso contrario
	 */
	public String getLexema(int index){
		String lex;
		try{
			lex = ts.get(index).getLexema();
		}
		catch (IndexOutOfBoundsException e){
			lex = null;
		}

		return lex;
	}

	/**
	 *  Inserta un elemento nuevo a la tabla
	 *  sido insertado.

	 */
	public void insertar(EntradaTS e){
		 ts.add(e);		
	 }

	 /**
	  *  Busca un elemento en la tabla de simbolos y devuelve la posicion en la
	  *  que se encuentra.
	  *  
	  * @param lexema - el elemento a reconocer
	  * @return -1 si el elemento no esta, la posicion en cualquier otro caso
	  */
	 public int buscar(String lexema){
		 int pos = NOESTA;
		 
		 for(EntradaTS e: ts){
			 if( e.getLexema().equals(lexema)){
				 pos = ts.indexOf(e);
				 break;
			 }
		 }
		 
		 return pos;
	 }
	 
	 /**	
	  * @see compilador.ts.buscar(String lexema)
	  */
	 public int getIndex(String o){
		 return buscar(o);
	 }
	 
	 public EntradaTS get(int index){
		 return ts.get(index);
	 }
}
